// (C) Copyright 2012 Enlightv. All rights reserved.

`timescale 1ns/100ps

module sync_cell 
#(parameter
    RESET_VALUE = 0
)
(
    input  I_clk,
    input  I_rst_n,
    input  I_data_in,
    output O_data_out
);

/******************************************************************************
                                <localparams>
******************************************************************************/

/******************************************************************************
                              <internal signals>
******************************************************************************/
(* ASYNC_REG = "TRUE" *) reg  dff1,dff2;

/******************************************************************************
                                <module body>
******************************************************************************/
always @(posedge I_clk or negedge I_rst_n)
    if (!I_rst_n)
        begin
        dff1 <= RESET_VALUE;
        dff2 <= RESET_VALUE;
        end
    else
        begin
        dff1 <= I_data_in;
        dff2 <= dff1;
        end

assign O_data_out = dff2;

endmodule

